/**
 * PagPrincipal.java
 *
 * Projeto: SGA-LEDS
 *
 * Rodrigo Soares Maia IFES - Instituto Federal do Espírito Santo - Campus Serra
 */
package controleInterno.cih;

import controleAtividades.cci.CtrlAtividades;
import controleInterno.cci.CtrlInterno;
import controleAtividades.cdp.Atividade;
import controleAtividades.cdp.NivelAtividade;
import controleInterno.cdp.Projeto;
import controleInterno.cdp.Usuario;
import java.util.ArrayList;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Button;
import org.zkoss.zul.Center;
import org.zkoss.zul.Div;
import org.zkoss.zul.East;
import org.zkoss.zul.Image;
import org.zkoss.zul.Include;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Tree;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treechildren;
import org.zkoss.zul.Treecol;
import org.zkoss.zul.Treeitem;
import org.zkoss.zul.Treerow;
import org.zkoss.zul.West;
import org.zkoss.zul.Window;

public class PagPrincipal extends GenericForwardComposer
{
    //TODO colocar atributos como private
    Window winPrincipal;
    Window winArvoreProjeto = null;
    Window winExecucao = null;
    Window winRelatorioAtividades = null;
    Borderlayout borderLayoutCenter;
    Listbox listaProjetos;
    
    East borderEastCenter;
    Center borderCenterCenter;
    West borderWestCenter;
    
    Center borderCenter;
    West borderWest;
    
    Div divCenterCenter;
    Div divWestCenter;
    Div divEastCenter;
    
    Image imgGeral;
    Image imgGrupo;
    Image imgIndividual;
    
    Usuario u;
    
    CtrlInterno ctrlI = CtrlInterno.getInstance();
    CtrlAtividades ctrlA = CtrlAtividades.getInstance();
    
    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        
        ctrlI.setPagPrincipal(this);
        ctrlA.setPagPrincipal(this);
        
        while (listaProjetos.getItemCount() > 0) {
            listaProjetos.removeItemAt(0);
        }
        
        //obtendo todos os projetos
        List<Projeto> projetos = ctrlI.obterProjetos();

        if (projetos != null) {
            for (int i = 0; i < projetos.size(); i++) {
                Projeto p = projetos.get(i);
                Listitem linha = new Listitem(projetos.get(i).toString(), p);
                linha.setParent(listaProjetos);
            }
        }
        
        borderEastCenter.setVisible(true);
        borderWestCenter.setVisible(true);
    }
    
    //TODO tentar usar o include no zul (o "apply" nao estava funcionando)
    public void onCreate$winPrincipal(Event event)
    {
        //TODO nao precisa disso
        //setando o menu superior (que contem tambem o cabecalho) //TODO mudar o nome da classe?
        //barraMenu = (Div) ctrlI.criarBarraMenu();
        //barraMenu.setParent(border.getNorth());
        
        u = (Usuario) execution.getSession().getAttribute("usuario");
        
        if (u != null)
        {
            ctrlI.setLabelUsuario(u.getPessoa().getNome());

            //habilitando funcionalidades a partir do tipo de usuario
        }
        else
        {
            Executions.sendRedirect("/");
            winPrincipal.detach();
        }
    }
    
    public void onClick$novoColaborador(Event event)
    {
        ctrlI.abrirPagFormUsuario();
    }
    
    public void onClick$novoProjeto(Event event)
    {
        ctrlI.abrirPagFormProjeto();
    }

    public void onClick$logout(Event event)
    {
        Executions.getCurrent().getSession().removeAttribute("usuario");
        Executions.sendRedirect("/");
    }
    
    public void onClick$imgGeral(Event event)
    {
        //TODO antes verificar se as outras janelas estao montadas, se sim, sumir com elas...
        //setando arvore para o centro da tela
        this.setArvore(divCenterCenter, NivelAtividade.GERAL);
        
        borderEastCenter.setVisible(false);
        borderWestCenter.setVisible(false);
        
        imgGeral.setSrc("images/botaoPlanejamentoAzul.png");
        imgGrupo.setSrc("images/botaoDetalhamento.png");
        imgIndividual.setSrc("images/botaoExecucao.png");
    }
    
    public void onClick$imgGrupo(Event event)
    {
        //TODO antes verificar se as outras janelas estao montadas, se sim, sumir com elas...
        //setando arvore para o centro da tela
        this.setArvore(divCenterCenter, NivelAtividade.GRUPO);
        
        borderEastCenter.setVisible(false);
        borderWestCenter.setVisible(false);
        
        imgGeral.setSrc("images/botaoPlanejamento.png");
        imgGrupo.setSrc("images/botaoDetalhamentoAzul.png");
        imgIndividual.setSrc("images/botaoExecucao.png");
    }
    
    public void onClick$imgIndividual(Event event)
    {        
        borderWestCenter.setWidth("50%");
        
        //setando arvore para a esquerda da tela
        this.setArvore(divWestCenter, NivelAtividade.INDIVIDUAL);
        
        borderWestCenter.setVisible(true);
        
        borderEastCenter.setWidth("50%");
        
        //setando a janela de execucao para a direita da tela
        this.setWinExecucao(divEastCenter);
        
        borderEastCenter.setVisible(true);
        
        imgGeral.setSrc("images/botaoPlanejamento.png");
        imgGrupo.setSrc("images/botaoDetalhamento.png");
        imgIndividual.setSrc("images/botaoExecucaoAzul.png");
    }
    
    public void onClick$listaProjetos(Event event)
    {
        Projeto p = (Projeto) listaProjetos.getSelectedItem().getValue();
        
        Executions.getCurrent().getSession().setAttribute("projeto", p);
        
        this.setArvore(divCenterCenter, NivelAtividade.GERAL);
        
        imgGeral.setSrc("images/botaoPlanejamentoAzul.png");
        imgGrupo.setSrc("images/botaoDetalhamento.png");
        imgIndividual.setSrc("images/botaoExecucao.png");
        
        borderEastCenter.setVisible(false);
        borderWestCenter.setVisible(false);
    }
    
    public void setArvore(Component local, NivelAtividade nivel)
    {
        if (winArvoreProjeto != null)
        {
            winArvoreProjeto.detach();
        }
        
        winArvoreProjeto = (Window) ctrlA.criarArvoreProjeto(nivel);

        //TODO antes verificar se as outras janelas estao montadas, se sim, sumir com elas...
        
        winArvoreProjeto.setParent(local);
    }
    
    public void setWinExecucao(Component local)
    {
        if (winExecucao != null)
        {
            winExecucao.detach();
        }
        
        winExecucao = (Window) ctrlA.criarWinExecucao();
        
        //TODO antes verificar se as outras janelas estao montadas, se sim, sumir com elas...
        
        winExecucao.setParent(divEastCenter);
    }
    
    public void setWinRelatorioAtividades()
    {
        if (winRelatorioAtividades != null)
        {
            winRelatorioAtividades.detach();
        }
        
        winRelatorioAtividades = (Window) ctrlA.criarWinRelatorioAtividades();
        
        //TODO antes verificar se as outras janelas estao montadas, se sim, sumir com elas...
        
        borderLayoutCenter.detach();
        
        borderWest.setVisible(false);
        
        winRelatorioAtividades.setParent(borderCenter);
    }
    
    public void montarPagProjetos()
    {
        if (winRelatorioAtividades != null)
        {
            winRelatorioAtividades.detach();
        }
        
        borderLayoutCenter.detach();
        
        borderWest.setVisible(true);
    }

    public void addProjeto(Projeto p) {
        Listitem linha = new Listitem(p.getNome(), p);
        linha.appendChild(new Listcell(p.getNome().toString()));
        linha.setParent(listaProjetos);
    }
}
